const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const FoodGISchema = new Schema({
  name: { 
    type: String, 
    required: true, 
    trim: true,
    index: true 
  },
  giValue: { 
    type: Number, 
    required: true,
    min: 0,
    max: 100
  },
  // GI分类: 低(0-55)、中(56-69)、高(≥70)
  giCategory: { 
    type: String, 
    enum: ['low', 'medium', 'high'],
    default: function() {
      const gi = this.giValue;
      if (gi <= 55) return 'low';
      if (gi <= 69) return 'medium';
      return 'high';
    }
  },
  category: { 
    type: String, 
    required: true,
    enum: [
      'grains',       // 谷物类
      'vegetables',   // 蔬菜类
      'fruits',       // 水果类
      'protein',      // 蛋白质(肉蛋奶)
      'legumes',      // 豆类
      'tubers',       // 薯类
      'nuts',         // 坚果类
      'dairy',        // 奶制品
      'processed',    // 加工食品
      'other'         // 其他
    ],
    index: true
  },
  // 营养素含量(每100g)
  nutrition: {
    calories: { type: Number, default: 0 },    // 卡路里
    carbs: { type: Number, default: 0 },       // 碳水(g)
    protein: { type: Number, default: 0 },     // 蛋白质(g)
    fat: { type: Number, default: 0 },         // 脂肪(g)
    fiber: { type: Number, default: 0 },       // 膳食纤维(g)
    sugar: { type: Number, default: 0 }        // 糖(g)
  },
  // 备注信息(如特殊烹饪方法等)
  notes: { type: String },
  // 推荐理由(可用于向用户展示)
  benefits: [{ type: String }],
  // 是否为主食
  isStapleFood: { type: Boolean, default: false },
  // 上次推荐时间(用于控制推荐频率)
  lastRecommendedAt: { type: Date },
  // 推荐计数
  recommendCount: { type: Number, default: 0 },
  createdAt: { type: Date, default: Date.now },
  updatedAt: { type: Date, default: Date.now }
});

// 复合索引
FoodGISchema.index({ name: 1, category: 1 });
FoodGISchema.index({ giValue: 1 });
FoodGISchema.index({ isStapleFood: 1, giValue: 1 });
FoodGISchema.index({ category: 1, giValue: 1 });

module.exports = mongoose.model('FoodGI', FoodGISchema); 